const fp = require("lodash/fp");
const cars = [
  { name: "FFFF FF", horsepower: 660, dollar_value: 700000, in_stock: true },
  {
    name: "SSSS C12 FF",
    horsepower: 660,
    dollar_value: 700000,
    in_stock: false,
  },
  { name: "JJJJ SX-F", horsepower: 660, dollar_value: 700000, in_stock: false },
  { name: "Audi R8", horsepower: 660, dollar_value: 700000, in_stock: false },
  {
    name: "Audi R8 Ine-77",
    horsepower: 660,
    dollar_value: 700000,
    in_stock: true,
  },
  {
    name: "Pagani Huatra",
    horsepower: 770,
    dollar_value: 130070,
    in_stock: false,
  },
];

// TODO:练习1： 使用函数组合 fp.flowRight() 重新实现下面这个函数
// let isLastInStock = function (cars) {
//   // 获取最后一条数据
//   let last_car = fp.last(cars);
//   console.log(last_car);
//   // 获取最后一条数据的 in_stock 属性值
//   return fp.prop("in_stock", last_car);
// };

// const trace = fp.curry((tag, v) => {
//   console.log(tag, v);
//   return v;
// });
//  console.log(isLastInStock(cars));
// const f = fp.flowRight(trace("in_stock 之后"),fp.prop("in_stock"), trace("last 之后"), fp.last);

const f = fp.flowRight(fp.prop("in_stock"), fp.last);
// console.log(f(cars));

// TODO: 练习2： 使用 fp.flowRight()、fp.prop() 和 fp.first() 获取第一个 car 的 name
const f2 = fp.flowRight(fp.prop("name"), fp.first);
// console.log(f2(cars));

// TODO:练习3: 使用函数组合的方式实现
let _average = function (xs) {
  return fp.reduce(fp.add, 0, xs) / xs.length;
};

let averageDollarValue = function (cars) {
  let dollar_values = fp.map(function (car) {
    return car.dollar_value;
  }, cars);
  // console.log(dollar_values);
  return _average(dollar_values);
};

// console.log(averageDollarValue(cars));

const _map = fp.map(car=> car.dollar_value)

const f3 = fp.flowRight(_average,_map);
console.log(f3(cars));


// TODO:练习4 下划线连接
let _underscore = fp.replace(/\W+/g,'_')
const sanitizeNames = fp.flowRight(_underscore,fp.toLower);
console.log(sanitizeNames(["Hello World"]));